
// 行数
var rows = 10;
// 列数
var cols = 10;
// 雷数
var bombs =  10;


// 存放所有td的二维数组
var tds = [];

// 记录游戏是否结束
var isOver = false;

// 创建扫雷表格
$("<table id='tb'></table>").appendTo($("body"));

for(var i = 0;i<rows;i++){
    var $tr  =  $("<tr></tr>");
    $tr.appendTo($("#tb"));

    var temp = [];

    for(var j = 0;j<cols;j++){
       var $td = $("<td></td>")
        .attr("state","normal")
        .addClass("cell")
        .appendTo($tr);

        $td[0].y=i;
        $td[0].x=j;
    
    temp.push($td);
    }
 


    tds.push(temp);
}

// console.log(tds);
// 随机生成所有雷的位置。

var nums =[];
for (var i = 0; i <rows*cols;i++){
    nums[i] = i;
}


for (var i = 0; i <bombs;i++){
    var ind = Math.floor(Math.random()*nums.length);
    var n = nums[ind];
    nums.splice(ind,1);

    // console.log(n);
    var r = Math.floor(n / cols);
    var c = n%cols;

    // console.log("第"+r+"行,第"+c+"列");
    tds[r][c].attr("bomb","yes");
}

// 屏蔽右键菜单
$(".cell").on("contextmenu",function(e){
    e.preventDefault();

})

// 给所有的td绑定点击事件。

$(".cell").on("mousedown",function(e){
    // console.log("e");
    if(isOver){
        return;
    }
    if (e.buttons==1){
        if ($(this).attr("state")!="normal"){
            return;
        }

        // console.log("左键");
        if ($(this).attr("bomb")=="yes"){
            $(this).attr("state","bombex");
            // alert("GAME OVER");
            gameover($(this));

        }else{
            // $(this).attr("state","open");
            // console.log(bombsNearby($(this)));
            openGrid($(this));
            
            if(checkWin()){
                alert("恭喜您过关了");
                isOver = true;
            }

        }
      }else if (e.buttons == 2){
        // console.log("右键");
            if($(this).attr("state")=="normal"){
                $(this).attr("state","flag");
            }else{
                $(this).attr("state","normal");
            }
    }

});


// 计算某个td周围有几颗雷

function bombsNearby($td){
    var nums = 0;
    //左上
    // var tx = $td.x - 1;
    // var ty = $td.y - 1;
    // if(tx>=0&&ty>=0){
    //     if(tds[ty][tx].attr("bomb")=="yes"){
    //         nums++;
    //     }
    // }

        for (var i = $td[0].x -1;i<=$td[0].x +1;i++){

            for(var j = $td[0].y -1;j<$td[0].y +1;j++){
                if(i==$td[0].x&&j==$td[0].y){
                    continue;
                }
                if(i<0||i>=cols||j<0||j>=rows){
                    continue;
                }
                if (tds[j][i].attr("bomb")=="yes"){
                    nums++;
                }
            }
        }   
        return nums;
}
    // 游戏失败函数
    function gameover($td){
        for(var i = 0; i<rows;i++){
            for(var j = 0; j<cols;j++){
                if(tds[i][j].attr("bomb")=="yes"){
                    tds[i][j].attr("state","bombpl");
                }
            }
        }
        $td.attr("state","bombex");
        alert("GAME OVER");

        isOver = true;
    }
    // 打开某个格子
    function openGrid($td){

        var num = bombsNearby($td);

        $td.attr("state","b"+num);

        if(num==0){
            for (var i = $td[0].x -1;i<=$td[0].x +1;i++){

                for(var j = $td[0].y -1;j<$td[0].y +1;j++){
                    if(i==$td[0].x&&j==$td[0].y){
                        continue;
                    }
                    if(i<0||i>=cols||j<0||j>=rows){
                        continue;
                    }
                    if (tds[j][i].attr("state")=="normal"){
                      openGrid(tds[j][i]);
                    }
                }
            }   
        }
    }

// 判断是否胜利的函数
    function checkWin(){
        for(var i=0; i<rows;i++){
            for(var j =0;j<cols;j++){
                if(tds[i][j].attr("bomb")!="yes"&&tds[i][j].attr("state")=="normal"){
                    return false;
                }
            }
        }
        return true;
    }



// 重新开始游戏（刷新页面）
$("#restart").on("click",function(){
    location.reload();




})












